home *** CD-ROM | disk | FTP | other *** search
/ Revolution - Das Atari CD Magazin 1997 / Revolution - Das Atari CD Magazin 1.iso / software / anwendng / qed_397 / sourcen / text.c < prev    next >
C/C++ Source or Header  |  1997-01-04  |  4KB  |  177 lines

  1. #include "global.h"
  2. #include "find.h"
  3. #include "mintlib.h"
  4. #include "qed.h"
  5. #include "set.h"
  6. #include "text.h"
  7.  
  8.  
  9. /* ------------------------------------------------------------------ */
  10. /*    Trash        : 1
  11.  *    Clipbrd    : 1
  12.  *    Projekt    : 8
  13.  *    Text        : 8
  14.  *    Temp        : 1    (für Projekt-Zwischen-Dateien)
  15. */
  16.  
  17. #define TEXTANZ 19
  18.  
  19. /* ------------------------------------------------------------------ */
  20. LOCAL TEXT_INF text_inf[TEXTANZ];
  21.  
  22. LOCAL WORD    last_icon = -1;
  23. LOCAL TEXTP    last_t_ptr = NULL;
  24.  
  25. LOCAL TEXTP    used_list;
  26. LOCAL TEXTP    free_list;
  27.  
  28. /* ------------------------------------------------------------------ */
  29.  
  30. TEXTP get_text(WORD icon)
  31. {
  32.     TEXTP    t_ptr;
  33.  
  34.     if (icon==-1) return NULL;
  35.     if (icon==last_icon) return (last_t_ptr);
  36.     for (t_ptr=used_list; t_ptr!=NULL; t_ptr=t_ptr->next)
  37.         if (t_ptr->link==icon)
  38.         {
  39.             last_icon = icon;
  40.             last_t_ptr = t_ptr;
  41.             break;
  42.         }
  43.     return t_ptr;
  44. }
  45.  
  46. LOCAL VOID nullen(TEXTP t_ptr)
  47. {
  48.     t_ptr->cursor_line = FIRST(&t_ptr->text);
  49.     t_ptr->file_date_time = -1L;
  50.     t_ptr->xpos = 0;
  51.     t_ptr->ypos = 0L;
  52.     t_ptr->moved = 0;
  53.     t_ptr->readonly = FALSE;
  54.     t_ptr->blink = t_ptr->block = t_ptr->block_dir = t_ptr->up_down = FALSE;
  55.     t_ptr->cursor = TRUE;
  56.     t_ptr->ending = tos;
  57.     t_ptr->namenlos = TRUE;
  58.     t_ptr->loc_opt = &loc_opt[0];
  59.     t_ptr->info_str[0] = EOS;
  60.     t_ptr->filename[0] = EOS;
  61. }
  62.  
  63. TEXTP new_text(WORD link)
  64. {
  65.     TEXTP t_ptr;
  66.  
  67.     if (free_list==NULL)
  68.     {
  69.         free_list = (TEXTP)Malloc(sizeof(TEXT_INF));
  70.         if (free_list==NULL) return NULL;
  71.         free_list->next = NULL;
  72.     }
  73.     if (get_text(link)!=NULL)                    /* gleiche Nummer nochmal */
  74.     {
  75.         inote(1,FATALERR,9);
  76.         return NULL;
  77.     }
  78.     t_ptr = free_list;                            /* Aushängen */
  79.     free_list = t_ptr->next;
  80.     t_ptr->next = used_list;                    /* Einhängen */
  81.     used_list = t_ptr;
  82.     t_ptr->link = link;
  83.     init_textring(&t_ptr->text);
  84.     nullen(t_ptr);
  85.     return t_ptr;
  86. }
  87.  
  88. VOID clear_text(TEXTP t_ptr)
  89. {
  90.     free_textring(&t_ptr->text);
  91.     nullen(t_ptr);
  92. }
  93.  
  94. VOID destruct_text(TEXTP t_ptr)
  95. {
  96.     TEXTP t;
  97.  
  98.     if (last_icon==t_ptr->link) last_icon = -1;
  99.     kill_textring(&t_ptr->text);
  100.     if (used_list==t_ptr)
  101.         used_list = t_ptr->next;
  102.     else
  103.     {
  104.         for (t=used_list; t->next!=t_ptr; t=t->next) ;
  105.         t->next = t_ptr->next;
  106.     }
  107.     if (t_ptr<text_inf || t_ptr>=&text_inf[TEXTANZ])
  108.         Mfree(t_ptr);
  109.     else
  110.     {
  111.         t_ptr->next = free_list;
  112.         free_list = t_ptr;
  113.     }
  114. }
  115.  
  116. VOID set_text_name(TEXTP t_ptr, const UBYTE *filename, BOOLEAN namenlos)
  117. {
  118.     FILENAME    str;
  119.     WORD        i, j;
  120.     UBYTE        m[MUSTER_LEN+1];
  121.  
  122.     strcpy(t_ptr->filename,filename);
  123.     t_ptr->namenlos = namenlos;
  124.     if (namenlos)
  125.     {
  126.         t_ptr->loc_opt = &loc_opt[0];
  127.     }
  128.     else
  129.     {
  130.         t_ptr->loc_opt = &loc_opt[0];
  131.         file_name(filename,str, FALSE);
  132.         j = 0;
  133.         for (i=1; i<loc_opt_anz; i++)
  134.         {
  135.             strcpy(m, muster_str[i]);
  136.             if (!caseSens((UBYTE *)filename, NULL))
  137.                 str_upper(m);
  138.             if (filematch(str, m))
  139.                 j = i;
  140.         }
  141.         t_ptr->loc_opt = &loc_opt[j];
  142.     }
  143. }
  144.  
  145. VOID update_loc_opt(VOID)
  146. {
  147.     TEXTP        t_ptr;
  148.     FILENAME    str;
  149.     WORD        i, j;
  150.  
  151.     for (t_ptr=used_list; t_ptr!=NULL; t_ptr=t_ptr->next)
  152.         if (!t_ptr->namenlos)
  153.         {
  154.             t_ptr->loc_opt = &loc_opt[0];
  155.             file_name(t_ptr->filename,str, FALSE);
  156.             j = 0;
  157.             for (i=1; i<loc_opt_anz; i++)
  158.             {
  159.                 if (filematch(str, muster_str[i]))
  160.                     j = i;
  161.             }
  162.             t_ptr->loc_opt = &loc_opt[j];
  163.         }
  164. }
  165.  
  166. VOID init_text(VOID)
  167. {
  168.     WORD    i;
  169.     TEXTP t_ptr = text_inf;
  170.  
  171.     used_list = NULL;
  172.     free_list = t_ptr;
  173.     for (i=TEXTANZ-1; (--i)>=0; t_ptr++)
  174.         t_ptr->next = &t_ptr[1];
  175.     t_ptr->next = NULL;
  176. }
  177.